
=== 主机注册相关的API ===

==== 终端设备Ping ====

    POST http://192.168.11.87:3000/v2/service/ping.json?sn=233232232323&request_time=23232323

需要的请求参数:
* sn : 终端设备的序列号
* request_time : 终端设备的机器时间

===== 错误区理 =====

当sn参数不对时(不存在或者位数不对)，返回的http状态码是406, 返回的结果如下:

<pre>
{"error_message":"Error sn param."}
</pre>

当request_time参数不对时，返回的http状态码是406, 返回的结果如下:
<pre>
{"error_message":"Error request_time param."}
</pre>

当主机信息不正确时(如主机uuid不存在), 返回的http状态码是500, 返回的结果如下:
<pre>
{"error_message":"Server infomation lost."}
</pre>

当主机接口信息不正确时(至少要返回一个主机接口), 返回的http状态码是500, 返回的结果如下:
<pre>
{"error_message":"Server intefaces lost."}
</pre>

===== 正常的响应 =====

响应结果是:
<pre>
{"meta":{"client_request_time":"232332233232","server_request_time":1364286642.019039,"server_response_time":1364286642.376506},
"server":{"server_uuid":"71573154-706e-43b7-8c4c-447f470b5f06","server_name":"qichunren-caojin87","cluster_uuid":"ace4ddca-7155-4396-8599-0b877c1494e8","cluster_name":"cluster-9f37b","created_at":"2013-01-28T14:35:43+08:00"},
"interfaces":[
    {"server_ip":"192.168.11.87","server_port":3000,"freeswitch_server":"192.168.11.87","freeswitch_port":5060,"freeswitch_igmp_port":5080,"rabbitmq_server":"192.168.11.87","rabbitmq_port":5672,"name":"extenal_fa1a2c746e01","active":null,"created_at":"2013-03-08T18:59:29+08:00","uuid":"123cb5ec-ac77-425f-bb26-a01238f249dd","interface_type":"extenal"},
    {"server_ip":"192.168.0.234","server_port":80,"freeswitch_server":"192.168.0.234","freeswitch_port":5060,"freeswitch_igmp_port":5080,"rabbitmq_server":"192.168.0.234","rabbitmq_port":5672,"name":"internal_192.168.0.234","active":false,"created_at":"2013-03-09T14:34:04+08:00","uuid":"d5252f06-cf10-476f-bfd6-65f57dfcd95b","interface_type":"internal_auto_config"}
  ]
}
</pre>
* meta: 分别表示客户端发起请求的时间，服务器开始处理的时间，服务器生成响应的时间
* server: 表示主机相关的信息
* interfaces: 表示主机接口列表


=== API调用说明 ===

目前服务器端开放的API包括终端 、频道、媒体文件等方面。
在调用API时，需要在访问接口中加上所调用的终端的access_token:

    http://api_url_bala_bala.json?access_token=your_terminal_access_token

* 如果URL中的access_token不正确，主机会返回http状态码为`403`, 响应正文是

<pre>
{"message":"Error token"}
</pre>

* 如果终端是未注册状态，主机会返回http状态码为`403`, 响应正文是

<pre>
{"message":"Device not registered"}
</pre>



=== 终端 API ===

==== 终端列表 ====

    GET /v1/terminals.json

<pre>
[
{"id":1,"name":"\u4e00\u9891\u9053","exten":"5000"},
{"id":2,"name":"\u4e8c\u9891\u9053","exten":"5001"},
{"id":3,"name":"\u4e09\u9891\u9053","exten":"5002"},
{"id":4,"name":"\u56db\u9891\u9053","exten":"5003"},
{"id":5,"name":"\u4e94\u9891\u9053","exten":"5004"}
]
</pre>

==== 某一个终端信息 ====

    GET /v1/terminals/:id.json

<pre>
{"id":17,"name":"mock_d3b4a","exten":"1000","status":false}
</pre>

=== 频道 API ===

==== 频道列表 ====

    GET /v1/channels.json

<pre>
[
{"id":1,"name":"\u4e00\u9891\u9053","exten":"5000"},{"id":2,"name":"\u4e8c\u9891\u9053","exten":"5001"},
{"id":3,"name":"\u4e09\u9891\u9053","exten":"5002"},{"id":4,"name":"\u56db\u9891\u9053","exten":"5003"},
{"id":5,"name":"\u4e94\u9891\u9053","exten":"5004"},{"id":6,"name":"211221","exten":"5005"}
]
</pre>



==== 某一个频道的信息 ====

    GET /v1/channels/:id.json

<pre>
{"id":1,"name":"\u4e00\u9891\u9053","exten":"5000"}
</pre>

=== 媒体文件 API ===

==== 媒体文件列表 ====

    GET /v1/media.json

<pre>
[
{"id":1,"uuid":"5e48f639-1733-43bb-8ea6-8bc9d4c19626","name":"ringing","file_size":17703,"url":"/uploads/medium/file/5e48f639-1733-43bb-8ea6-8bc9d4c19626/9b2b9e894398625fca984c30f0c4f855-ringing.mp3","file_exist":true},
{"id":2,"uuid":"f34eefd2-54e3-4b57-85cd-99edd4bacf0b","name":"wo_de_gesheng_li.mp3","file_size":3446989,"url":"/uploads/medium/file/f34eefd2-54e3-4b57-85cd-99edd4bacf0b/feef679b981b8f695b1ece458a636089-wo_de_gesheng_li.mp3","file_exist":true},
{"id":3,"uuid":"bf203fd1-0c18-47eb-b2cb-e42ea2a5c585","name":"Beyond - \u5149\u8f89\u5c81\u6708.mp3","file_size":4785590,"url":"/uploads/medium/file/bf203fd1-0c18-47eb-b2cb-e42ea2a5c585/4dc283c7ac7bd5d9bf9b72f167d4ec7d-Beyond_-_____.mp3","file_exist":true},
{"id":4,"uuid":"9c705a86-fdf5-45b7-800a-858b7a5ddb8c","name":"zui_shuan_mingzu_feng.mp3","file_size":4600731,"url":"/uploads/medium/file/9c705a86-fdf5-45b7-800a-858b7a5ddb8c/2dd304de42b66c3fdfcc953d304d767d-zui_shuan_mingzu_feng.mp3","file_exist":true}
]
</pre>

==== 某一个媒体文件信息 ====

    GET /v1/media/:id.json

<pre>
{"id":1,"uuid":"5e48f639-1733-43bb-8ea6-8bc9d4c19626","name":"ringing","file_size":17703,"url":"/uploads/medium/file/5e48f639-1733-43bb-8ea6-8bc9d4c19626/9b2b9e894398625fca984c30f0c4f855-ringing.mp3","file_exist":true}
</pre>

=== 会话 API ===

==== 获取所有会话列表 ====

    GET domain/v2/calls.json

 <pre>
[{"call_type":"unicast","callees":"50","caller":"flash_1","channel_uuid":"13dc97e6-dbf7-4977-94a3-682abfc9b776","created_at":null,"id":null,"priority":8,"priority_name":"\u666e\u901a\u5bf9\u8bb2","record_done":null,"record_file":null,"start_time":"2013-03-18T03:39:26+08:00","updated_at":null,"state":"connected","member_count":null,"invited_count":null,"url_spy":"webapi/telecast/mp3/13dc97e6-dbf7-4977-94a3-682abfc9b776/stream.mp3"}]
</pre>